export default {
  title: 'Gateways',
  search: {
    searchText: 'Enter search text',
  },
  table: {
    name: 'Name',
    status: 'Status',
    online: 'Online',
    offline: 'Offline',
    activeConnectors: 'Active Connectors',
    version: 'Version',
    createdTime: 'Created Time',
  },
  action: {
    add: 'Add Gateway',
    startCommand: 'Launch Command',
    generalSetting: 'General Configuration',
    connectors: 'Connectors',
    deleteGateway: 'Delete Gateway',
    deleteConfirm: 'Are you sure you want to delete gateway device [{name}]?',
    deleteConfirmContent:
      'Please note that after confirmation, the device and all its related data will not be recoverable!',
    deleteSuccess: 'Delete gateway success!',
    deleteText: 'Delete',
  },
  form: {
    addTitle: 'Add Gateway',
    name: 'Gateway name',
    namePlaceholder: 'Enter gateway name',
    type: 'Device type',
    addSuccess: 'Gateway added successfully',
  },
  tabs: {
    base: 'Base',
    connectors: 'Connectors configuration',
    logs: 'Logs',
    statistics: 'Statistics',
    remoteShell: 'Remote Shell',
    rpc: 'RPC',
    disabledTip: 'This feature is not configured yet. Please configure it in General Configuration.',
    comingSoon: 'Coming soon...',
  },
  header: {
    gatewayFallback: 'Gateway',
    version: 'Gateway Version',
    type: 'Gateway Type',
    devicesActiveInactive: 'Devices (Active | Inactive)',
    connectorsEnabledDisabled: 'Connectors (Enabled | Disabled)',
    errors: 'Errors',
  },
  launch: {
    title: 'Launch gateway',
    runTip: 'Use the following instruction to run IoT Gateway in Docker compose with credentials for selected device',
    installTools: 'Install required client tools',
    docs: 'Docs',
    downloadConfig: 'Download configuration file',
    download: 'Download',
    downloadNote: 'Download docker-compose.yml for your gateway',
    note: 'Run the following command in the directory that contains docker-compose.yml to start the gateway',
    downloadError: 'Download failed, please try again later',
  },
  statistics: {
    segmented: {
      storage: 'Storage',
      machine: 'Machine',
    },
  },
  machine: {
    cpu: 'CPU',
    memory: 'Memory',
    disk: 'Disk',
    coresSuffix: 'cores',
    diskFreeSuffix: 'GB available',
    cardTitle: 'Machine resources',
    series: {
      cpuUsage: 'Gateway process CPU usage',
      memoryUsage: 'Gateway process memory usage',
      diskFree: 'Disk free space',
    },
    yAxis: {
      usage: 'Usage (%)',
      disk: 'Disk space (GB)',
    },
  },
  storage: {
    storageMsgCount: 'Storage message count',
    messagesFromPlatform: 'Messages from platform',
    pushedDatapoints: 'Pushed datapoints',
    messages: 'Messages',
    legends: {
      storagePulled: 'Message pulled from storage',
      platformPushed: 'Message pushed to platform',
      platformSent: 'Message sent to platform',
      attributes: 'Attributes',
      telemetry: 'Telemetry',
    },
  },
  logs: {
    global: {
      dateFormat: 'Date format',
      dateFormatRequired: 'Date format is required!',
      dateFormatHelp: 'Date format in log message',
      logFormat: 'Log format',
      logFormatRequired: 'Log format is required!',
      logFormatHelp: 'Log message format',
    },
    remote: {
      title: 'Remote logging',
      tip: 'Enables remote logging and logs reading from the gateway',
      level: 'Log level',
    },
    local: {
      title: 'Local logging',
      level: 'Log level',
      filePath: 'File path',
      filePathRequired: 'File path is required!',
      fullPath: 'Full path: {path}',
      period: 'Log saving period',
      periodRequired: 'Saving period is required!',
      backupCount: 'Backup count',
      backupCountRequired: 'Backup count is required!',
      backupCountHelp:
        'If backup count is > 0, when a rollover is done, no more than backup count files are kept - the oldest ones are deleted',
    },
  },
  storageConfig: {
    title: 'Storage',
    desc: 'Configuration used to store inbound data before sending to the platform',
    segmented: {
      memory: 'Memory storage',
      file: 'File storage',
      sqlite: 'SQLITE',
    },
    tips: {
      memory: 'Data will be stored in an in-memory queue, fastest but not persistent.',
      file: 'Data will be stored as separate files and will be preserved even if the gateway restarts.',
      sqlite: 'Data will be stored in a file-based database and will be preserved even if the gateway restarts.',
    },
    memory: {
      readRecordsCount: 'Records to read from storage',
      readRecordsCountHelp: 'Number of messages to read from storage and send to platform',
      maxRecordsCount: 'Max records in storage',
      maxRecordsCountHelp: 'Maximum number of data entries in storage before sending to the platform',
      required: 'Required',
    },
    file: {
      dataFolderPath: 'Data folder path',
      dataFolderPathHelp: 'Folder path to store data (relative or absolute)',
      maxFileCount: 'Max number of files',
      maxFileCountHelp: 'Maximum number of files to be created',
      maxReadRecordsCount: 'Max records to read from storage',
      maxReadRecordsCountHelp: 'Number of messages to read from storage and send to platform',
      maxRecordsPerFile: 'Max records per file',
      maxRecordsPerFileHelp: 'Maximum number of records that will be stored in a single file',
      required: 'Required',
    },
    sqlite: {
      storagePath: 'Storage path',
      storagePathHelp: 'Folder path to store data (relative or absolute)',
      ttlCheckHours: 'Message TTL check (in hours)',
      ttlCheckHoursHelp: 'How often the gateway checks data expiration',
      ttlDays: 'Message TTL (in days)',
      ttlDaysHelp: 'Maximum number of days to retain data in storage',
      maxRecordsCount: 'Max records in storage',
      maxRecordsCountHelp: 'Maximum number of days to retain data in storage',
      required: 'Required',
    },
  },
  statisticsConfig: {
    general: {
      enable: 'General statistics',
      tip: 'Enable gateway statistics (machine, storage, connectors)',
      enableCustom: 'Custom statistics',
      enableCustomTip: 'Enable collecting statistics via custom commands',
      sendPeriod: 'Statistics reporting period (in sec)',
      customSendPeriod: 'Custom reporting period (in sec)',
      required: 'Required!',
    },
    commands: {
      title: 'Commands',
      subTitle: 'Commands used to collect additional statistics',
      timeSeriesName: 'Timeseries name',
      timeSeriesNameRequired: 'Timeseries name is required!',
      timeSeriesNameHelp: 'Statistics telemetry key',
      timeout: 'Timeout (in sec)',
      timeoutHelp: 'Timeout for command execution',
      command: 'Command',
      commandHelp: 'Command execution result will be used as telemetry value',
      advanced: 'Advanced settings',
      installCmd: 'Install command',
      installCmdHelp: 'Dependencies to install before executing the command',
      add: 'Add command',
    },
  },
  message: {
    invalidJson: 'Invalid JSON format, please check!',
  },
  general: {
    basic: {
      remoteConfiguration: 'Remote Configuration',
      remoteConfigurationHelp: 'Enables remote configuration and management of the gateway',
      remoteShell: 'Remote shell',
      remoteShellHelp: 'Enables remote control of the operating system with the gateway from the Remote Shell widget',
      platformHost: 'Platform host',
      platformHostRequired: 'Platform host is required!',
      platformHostHelp: 'Hostname or IP address of platform server',
      platformPort: 'Platform port',
      platformPortRequired: 'Platform port is required!',
      platformPortHelp: 'Port of MQTT service on platform server',
    },
    security: {
      title: 'Security',
      accessToken: 'Access token',
      accessTokenRequired: 'Please enter access token!',
      copy: 'Copy',
      copyTip: 'Click to copy',
      generateAccessToken: 'Generate random access token',
      caCert: 'CA Certificate',
      caCertRequired: 'Please upload or enter CA certificate!',
      caCertHelp: 'Path to CA certificate file (.pem / .key)',
      draggerText: 'Drop file here or Browse file',
      clientId: 'Client ID',
      clientIdRequired: 'Please enter Client ID!',
      clientIdHelp: 'MQTT client id for the gateway from platform server',
      username: 'Username',
      usernameHelp: 'MQTT username for the gateway from platform server',
      generateUsername: 'Generate random username',
      password: 'Password',
      passwordHelp: 'MQTT password for the gateway from platform server',
      generatePassword: 'Generate random password',
    },
    report: {
      title: 'Report strategy',
      type: 'Type',
      reportPeriodRequired: 'Report period is required!',
      ms: 'ms',
    },
    confirm: {
      remoteConfig: {
        head: 'Configurations will be deleted',
        tip: 'Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.',
        inputTip: 'To turn off configuration, enter gateway name below ',
        inputPlaceholder: 'Gateway name*',
        okText: 'Turn Off',
        cancelText: 'Cancel',
        nameMismatch: 'Gateway name does not match',
      },
    },
    mode: { basic: 'Basic', advanced: 'Advanced' },
  },
  grpcConfig: {
    title: 'GRPC',
    enable: 'GRPC',
    enableHelp: 'Enable GRPC server',
    keepalivePermitWithoutCalls: 'Keep alive permit without calls',
    keepalivePermitWithoutCallsHelp:
      'Allow server to keep the GRPC connection alive even when there are no active RPC calls',
    serverPort: 'Server port',
    serverPortRequired: 'Server port is required!',
    serverPortHelp: 'Network port on which GRPC server will listen for incoming connections',
    keepAliveTimeoutMs: 'Keep alive timeout (in ms)',
    keepAliveTimeoutMsRequired: 'Keep alive timeout is required!',
    keepAliveTimeoutMsHelp:
      'Maximum time the server should wait for a keepalive ping response before considering the connection dead',
    keepAliveTimeMs: 'Keep alive (in ms)',
    keepAliveTimeMsRequired: 'Keep alive is required!',
    keepAliveTimeMsHelp: 'Duration between two successive keepalive ping messages when there is no active RPC call',
    minTimeBetweenPingsMs: 'Min time between pings (in ms)',
    minTimeBetweenPingsMsRequired: 'Min time between pings is required!',
    minTimeBetweenPingsMsHelp: 'Minimum amount of time the server should wait between sending keepalive ping messages',
    maxPingsWithoutData: 'Max pings without data',
    maxPingsWithoutDataRequired: 'Max pings without data is required!',
    maxPingsWithoutDataHelp:
      'Maximum number of keepalive ping messages that the server can send without receiving any data before it considers the connection dead',
    minPingIntervalWithoutDataMs: 'Min ping interval without data (in ms)',
    minPingIntervalWithoutDataMsRequired: 'Min ping interval without data is required!',
    minPingIntervalWithoutDataMsHelp:
      'Minimum amount of time the server should wait between sending keepalive ping messages when there is no data being sent or received',
  },
  otherConfig: {
    checkingDeviceActivity: 'Checking device activity',
    checkingDeviceActivityHelp: 'Enables monitor the activity of each connected device',
    inactivityTimeout: 'Inactivity timeout (in sec)',
    inactivityTimeoutRequired: 'Inactivity timeout is required!',
    inactivityTimeoutHelp: 'Time after which the gateway will disconnect device',
    inactivityCheckPeriod: 'Inactivity check period (in sec)',
    inactivityCheckPeriodRequired: 'Inactivity check period is required!',
    inactivityCheckPeriodHelp: 'Periodicity of device activity check',
    advanced: 'Advanced',
    minPackSendDelay: 'Min pack send delay (in ms)',
    minPackSendDelayRequired: 'Required!',
    minPackSendDelayHelp:
      'Delay between sending packs of messages (Decreasing this setting results in increased CPU usage)',
    qos: 'QoS',
    qosHelp: 'Quality of Service in MQTT messaging (0-at most once, 1-at least once)',
    checkConnectorsConfiguration: 'Check connectors configuration (in sec)',
    checkConnectorsConfigurationRequired: 'Required!',
    maxPayloadSize: 'Max payload size in bytes',
    maxPayloadSizeRequired: 'Required!',
    maxPayloadSizeHelp: 'Maximum package size in bytes',
    minPackSizeToSend: 'Min packet size to send',
    minPackSizeToSendRequired: 'Required!',
    minPackSizeToSendHelp: 'Minimum package size for sending',
  },
  details: {
    // Devices section for gateway base
    devices: {
      table: {
        deviceType: 'Device Type',
        connectorName: 'Connector Name',
        connectorType: 'Connector Type',
      },
      action: {
        showDeviceInfo: 'Show Device Info',
      },
    },
    // Alarms section for gateway base
    alarms: {
      title: '告警',
      table: {
        createdTime: '创建时间',
        type: '类型',
        severity: '严重性',
        details: '详情',
        status: '状态',
      },
      detailTitle: '告警详情',
    },
    rpc: {
      title: 'Service RPC',
      logsTitle: 'RPC Logs',
      command: 'Command',
      commandRequired: 'Command is required',
      commandPlaceholder: 'Select command',
      timeout: 'Timeout (in sec)',
      send: 'Send',
      openTerminal: 'Open Terminal',
      response: 'Response',
      timestamp: 'Timestamp',
      level: 'Level',
      message: 'Message',
      sendSuccess: 'RPC sent successfully',
    },
    shell: {
      welcome: 'Welcome to ThingsBoard RPC remote shell.',
      currentTarget: 'Current target device for RPC terminal:',
      remotePlatformInfo: 'Remote platform info:',
      os: 'OS:',
      release: 'Release:',
      failedToGetInfo: 'Failed to get remote platform info.',
      commandFailed: 'Command dispatch failed.',
      executeError: 'Execute command error.',
    },
    logs: {
      general: 'General',
      service: 'Service',
      connection: 'Connection',
      storage: 'Storage',
      extension: 'Extension',
      createdTime: 'Created time',
    },
    connectors: {
      title: 'Connectors',
      addNew: 'Add New',
      doubleClickTip: 'Double click table row to view configuration!',
      disconnected: 'Disconnected',
      connected: 'Connected',
      errorsInactive: 'Errors: Inactive',
      errorsCount: 'Errors: {count}',
      errorsZero: 'Errors: 0',
      loading: 'Loading connector configuration...',
      protocolNotSupported: 'Protocol not yet integrated',
      protocolDeveloping: '{protocol} protocol configuration interface is under development, please stay tuned.',
      connectorName: 'Connector Name:',
      protocolType: 'Protocol Type:',
      backToSelect: 'Back to Selection',
      createOther: 'Create Other Connector',
      selectConnector: 'Select a connector from the left to view and edit its configuration',
      getStarted: 'Get Started',
      delete: 'Delete',
      deleteSuccess: 'Connector deleted successfully',
      deleteConfirm: 'Are you sure you want to delete this connector?',
      deleteConfirmContent: 'This action cannot be undone.',
      // Table columns
      enabled: 'Enabled',
      name: 'Name',
      type: 'Type',
      configuration: 'Configuration',
      status: 'Status',
      outOfSync: 'OUT OF SYNC',
      sync: 'SYNC',
      rpc: 'RPC',
      logs: 'Logs',
      // Empty state
      noConnectorSelected: 'No connector selected',
      noConnectorSelectedDescription:
        'Please select a connector from the left list to view configuration, or create a new connector to get started.',
      createNewConnector: 'Create New Connector',
      // Delete confirmation
      deleteConnectorConfirm: 'Are you sure you want to delete connector {name}?',
      allConnectorDataWillBeDeleted: 'All connector data will be deleted.',
    },
    timeFilter: {
      timeWindow: 'Time Window',
      last: 'Last',
      relative: 'Relative',
      scope: 'Range',
      aggregation: 'Aggregation',
      limit: 'Limit',
      cancel: 'Cancel',
      update: 'Update',
      lastMinutes: '{count} min',
      lastHours: '{count} hour',
      lastDays: '{count} day',
      currentHour: 'Current Hour',
      currentDay: 'Current Day',
      todaySoFar: 'Today So Far',
      thisWeekSunSat: 'This Week (Sun-Sat)',
      thisWeekMonSun: 'This Week (Mon-Sun)',
      thisMonth: 'This Month',
      thisMonthSoFar: 'This Month So Far',
      thisQuarter: 'This Quarter',
      thisQuarterSoFar: 'This Quarter So Far',
      thisHalfYear: 'This Half Year',
      thisHalfYearSoFar: 'This Half Year So Far',
      thisYear: 'This Year',
      thisYearSoFar: 'This Year So Far',
      realtime: 'Realtime',
      historical: 'Historical',
    },
    connector: {
      basicMode: 'Basic Mode',
      advancedMode: 'Advanced Mode',
      name: 'Connector Name',
      nameRequired: 'Connector name is required',
      logLevel: 'Log Level',
      logLevelPlaceholder: 'Select log level',
      enableRemoteLogging: 'Enable Remote Logging',
      enabled: 'Enabled',
      disabled: 'Disabled',
      remoteLoggingTip: 'Enable remote logging and gateway log reading functionality',
      reportType: 'Report Type',
      reportTypePlaceholder: 'Select report type',
      reportTypeRequired: 'Report type is required',
      reportPeriod: 'Report Period',
      reportPeriodRequired: 'Please enter report period',
      milliseconds: 'milliseconds',
      convertToAdvancedFailed: 'Failed to convert to advanced mode',
      noInitialConfig: 'No initial configuration found, cannot reset',
      resetConfirm: 'Confirm Reset',
      resetConfirmContent:
        'Are you sure you want to reset all configurations to initial state? This will lose all current unsaved changes.',
      resetConfirmOk: 'Confirm Reset',
      resetConfirmCancel: 'Cancel',
      configResetSuccess: 'Configuration has been reset to initial state',
      resetConfigError: 'Error occurred while resetting configuration',
      saveConfigError: 'Error occurred while saving configuration',
    },
    activity: {
      title: 'Activity',
      addComment: 'Add comment',
      submit: 'Submit',
      export: 'Export',
      sortAsc: 'Sort (Ascending)',
      sortDesc: 'Sort (Descending)',
      refresh: 'Refresh',
      cancel: 'Cancel',
      confirm: 'Confirm',
      author: 'Author',
      createdTime: 'Created Time',
      editedTime: 'Edited Time',
      text: 'Text',
      user: 'User',
      system: 'System',
      activityExportFilename: 'Activity-{id}-{timestamp}.csv',
    },
    addConnector: {
      title: 'Add connector',
      type: 'Type',
      name: 'Name',
      nameRequired: 'Name is required',
      nameExists: 'Name already exists',
      loggingLevel: 'Logging level',
      fillDefaults: 'Fill configuration with default values',
      fillDefaultsTooltip: "This property allows to fill connector configuration with default values on it's creation.",
    },
    connectorConfig: {
      basicConfig: 'Basic Configuration',
      connectionConfig: 'Connection Configuration',
      dataMapping: 'Data Mapping',
      requestMapping: 'Request Mapping',
      workers: 'Workers',
      masterConnections: 'Master Connections',
      serverConfiguration: 'Server configuration',
      serverConfig: 'Server Configuration',
      configuration: 'Configuration',
      reset: 'Reset',
      save: 'Save',
      resetConfirm: 'Confirm Reset',
      resetConfirmContent:
        'Are you sure you want to reset all configurations to initial state? This will lose all current unsaved changes.',
      resetConfirmOk: 'Confirm Reset',
      resetConfirmCancel: 'Cancel',
      convertToAdvancedFailed: 'Failed to convert to advanced mode',
      jsonFormatError: 'JSON format error, please check!',
    },
    connectorLogs: {
      title: '{connectorName} - Logs',
      fallbackTitle: 'Connector Logs',
      subtitle: 'View connector and converter logs',
      connector: 'Connector',
      converter: 'Converter',
      createdTime: 'Created time',
      level: 'Level',
      message: 'Message',
    },
    general: {
      basicConfig: 'Basic Configuration',
      reportStrategy: 'Report Strategy Configuration',
      enableReportStrategy: 'Enable Report Strategy',
      reportStrategyTip: 'Configure the reporting method and frequency of log data',
      reportStrategyDisabled: 'Report strategy is disabled, log data will not be automatically reported',
      nameExists: 'Name already exists',
      // Remote configuration modal
      configurationsWillBeDeleted: 'Configurations will be deleted',
      turningOffRemoteConfiguration:
        'Turning off Remote Configuration is possible only if there is physical access to the Gateway. All previous configurations will be deleted.',
      enterGatewayNameBelow: 'To turn off configuration, enter gateway name below',
      gatewayNamePlaceholder: 'Gateway name*',
      turnOff: 'Turn Off',
      cancel: 'Cancel',
      gatewayNameMismatch: 'Gateway name does not match',
    },

    modbus: {
      masterConnections: {
        title: 'Master Connections',
        description: 'Configuration sections for connecting to Modbus servers and reading data from them.',
        noDevices: 'No device connections configured. Click "+" to create one.',
        deviceName: 'Device name',
        info: 'Info',
        unitId: 'Unit ID',
        type: 'Type',
        actions: 'Actions',
      },
      serverConfiguration: {
        title: 'Modbus Server Configuration',
        values: 'Values',
        serverConnection: 'Server Connection',
        host: 'Host',
        hostRequired: 'Please enter host address',
        port: 'Port',
        portRequired: 'Please enter port number',
        method: 'Method',
        selectMethod: 'Select method',
        unitId: 'Unit ID',
        unitIdRequired: 'Please enter Unit ID',
        deviceName: 'Device name',
        deviceNameRequired: 'Please enter device name',
        deviceProfile: 'Device profile',
        pollPeriod: 'Poll period (ms)',
        baudrate: 'Baudrate',
        selectBaudrate: 'Select baudrate',
        sendDataToPlatform: 'Send data to platform',
        advancedSettings: 'Advanced connection settings',
        byteOrder: 'Byte order',
        wordOrder: 'Word order',
        tlsConnection: 'TLS Connection',
        certificateFile: 'Certificate file',
        keyFile: 'Key file',
        password: 'Password',
        serverHostname: 'Server hostname',
        vendorName: 'Vendor name',
        productCode: 'Product code',
        vendorUrl: 'Vendor URL',
        productName: 'Product name',
        modelName: 'Model name',
        validationFailed: 'Server configuration validation failed',
      },
      deviceDrawer: {
        addDevice: 'Add Device',
        editDevice: 'Edit Device',
        deviceConfiguration: 'Device Configuration',
        serverConnection: 'Server Connection',
        strict: 'Strict',
        bytesize: 'Bytesize',
        selectBytesize: 'Select bytesize',
        stopbits: 'Stopbits',
        parity: 'Parity',
        selectParity: 'Select parity',
        reportStrategy: 'Report strategy',
        reportType: 'Report type',
        selectReportType: 'Select report type',
        reportPeriod: 'Report period',
        reportPeriodRequired: 'Please enter report period',
        milliseconds: 'milliseconds',
        advancedSettings: 'Advanced settings',
        connectionTimeout: 'Connection timeout (s)',
        connectAttemptTime: 'Connect attempt time (ms)',
        connectAttemptCount: 'Connect attempt count',
        waitAfterFailedAttempts: 'Wait after failed attempts (ms)',
        retries: 'Retries',
        retryOnEmpty: 'Retry on empty',
        retryOnInvalid: 'Retry on invalid',
        attributes: 'Attributes',
        timeSeries: 'Time series',
        attributeUpdates: 'Attribute updates',
        rpcRequests: 'RPC requests',
        validationFailed: 'Validation failed',
      },
      valuesDrawer: {
        title: 'Values',
        holdingRegisters: 'Holding Registers',
        coilsInitializer: 'Coils Initializer',
        inputRegisters: 'Input Registers',
        discreteInputs: 'Discrete Inputs',
        configureMapping: 'Configure {type} data mapping rules',
        attributeData: 'Attribute Data',
        timeSeriesData: 'Time Series Data',
        attributeUpdates: 'Attribute Updates',
        rpcRequests: 'RPC Requests',
      },
    },
    mqtt: {
      connection: {
        title: 'Connection Configuration',
        hostAddress: 'Host Address',
        hostRequired: 'Please enter host address',
        port: 'Port',
        portRequired: 'Please enter port number',
        mqttVersion: 'MQTT Version',
        selectVersion: 'Select version',
        clientId: 'Client ID',
        securityConfig: 'Security Configuration',
        basicAuth: 'Use username and password for authentication',
        certificateAuth: 'Use SSL/TLS certificates for authentication, paths based on gateway file system',
        anonymousAuth: 'No authentication required, connect directly to MQTT broker',
        username: 'Username',
        usernameRequired: 'Please enter username',
        usernamePlace: 'Please enter username',
        password: 'Password',
        passwordRequired: 'Please enter password',
        passwordPlace: 'Please enter password',
        caCertPath: 'CA Certificate Path',
        caCertRequired: 'Please enter CA certificate path',
        privateKeyPath: 'Private Key File Path',
        privateKeyRequired: 'Please enter private key file path',
        clientCertPath: 'Client Certificate Path',
        clientCertRequired: 'Please enter client certificate path',
        validationFailed: 'Form validation failed',
      },
      dataMapping: {
        title: 'Data mapping',
        description:
          'Data mapping provides the capability to parse and convert the data received from a MQTT client in incoming messages into specific attributes and time series data keys.',
        noMappings: 'No data mappings configured. Click "+" to create one.',
        topicFilter: 'Topic filter',
        qos: 'QoS',
        payloadType: 'Payload type',
        actions: 'Actions',
        topicFilterRequired: 'Topic filter is required for all mappings',
      },
      requestsMapping: {
        title: 'Requests mapping',
        description:
          'MQTT Connector requests allows you to connect, disconnect, process attribute requests from the device, handle attribute updates on the server and RPC processing configuration.',
        noRequests: 'No requests mapping configured. Click "+" to create one.',
        type: 'Type',
        details: 'Details',
        actions: 'Actions',
        connectRequest: 'Connect request',
        disconnectRequest: 'Disconnect request',
        attributeRequest: 'Attribute request',
        attributeUpdate: 'Attribute update',
        rpcCommand: 'RPC command',
        noTopicFilter: 'No topic filter',
        noAttributeFilter: 'No attribute filter',
        noMethodFilter: 'No method filter',
      },
      workers: {
        maxWorkers: 'Max number of workers',
        maxWorkersRequired: 'Max number of workers is required!',
        maxWorkersTooltip: 'Maximum number of worker threads for processing MQTT messages',
        maxMessagesQueue: 'Max messages queue per worker',
        maxMessagesQueueRequired: 'Max messages queue per worker is required!',
        maxMessagesQueueTooltip: 'Maximum number of messages that can be queued for each worker',
        validationFailed: 'Form validation failed',
      },
      dataMappingDrawer: {
        editTitle: 'Edit Data Mapping',
        addTitle: 'Add Data Mapping',
        subtitle: 'Data Mapping',
        topicFilter: 'Topic filter',
        topicFilterRequired: 'Topic filter is required!',
        qos: 'QoS',
        qosRequired: 'Please select QoS level',
        payloadType: 'Payload type',
        payloadTypeRequired: 'Please select payload type',
        deviceInfoConfig: 'Device Information Configuration',
        deviceName: 'Device Name',
        deviceNameRequired: 'Device name is required',
        selectSource: 'Select source',
        sourceRequired: 'Please select data source',
        deviceNameExpressionRequired: 'Please enter device name expression',
        deviceProfile: 'Device Profile',
        deviceProfileRequired: 'Please enter device profile expression',
        timeout: 'Timeout (ms)',
        timeoutRequired: 'Please enter timeout',
        sendOnlyOnChange: 'Send data only on change',
        attributes: 'Attributes',
        timeseries: 'Timeseries',
        validationFailed: 'Validation failed',
        // Added extended section labels
        deviceNameLabel: 'Device name',
        deviceNameExpressionRequiredMsg: 'Please enter device name expression',
        deviceProfileLabel: 'Device profile',
        deviceProfileExpressionRequiredMsg: 'Please enter device profile expression',
        reportStrategyConfig: 'Report Strategy Configuration',
        enableTimedReport: 'Enable timed reporting',
        reportTypeLabel: 'Report Type',
        reportTypeRequired: 'Report type is required',
        reportPeriodLabel: 'Report Period',
        reportPeriodRequired: 'Report period is required',
        reportPeriodPlaceholder: '30000',
        dataFieldsConfig: 'Data Field Configuration',
        attributesSection: 'Device Attributes',
        attributesStaticDesc: 'Static attribute data',
        configureAttributes: 'Configure Attributes',
        noAttributeFields: 'No attribute fields configured. Click the top-right "Configure Attributes" button to add.',
        timeseriesSection: 'Timeseries Data',
        timeseriesDynamicDesc: 'Dynamic telemetry data',
        configureTimeseries: 'Configure Timeseries',
        noTimeseriesFields:
          'No timeseries fields configured. Click the top-right "Configure Timeseries" button to add.',
        customConverterConfig: 'Custom Converter Configuration',
        extensionClassName: 'Extension Class Name',
        extensionClassNameRequired: 'Please enter extension class name',
        extensionParams: 'Configuration Parameters',
        extensionParamsDesc: 'Initialization parameters for the converter',
        addParameter: 'Add Parameter',
        noParameters: 'No parameters configured. Click the top-right "Add Parameter" button to set up.',
      },

      fieldConfigModal: {
        title: 'Configure {fieldType} Fields',
        attributesDescription: 'Configure attribute field mapping to extract device attribute data from MQTT messages.',
        timeseriesDescription:
          'Configure timeseries field mapping to extract device telemetry data from MQTT messages.',
        noFields: 'No {fieldType} fields',
        clickToAdd: 'Click the button below to add fields',
        fieldConfig: '{fieldType} Field Configuration',
        dataType: 'Data Type',
        selectDataType: 'Please select data type',
        fieldName: 'Field Name',
        fieldNameRequired: 'Please enter field name',
        fieldNamePlaceholder: 'e.g.: temperature',
        fieldValueExpression: 'Field Value Expression',
        fieldValueRequired: 'Please enter field value expression',
        fieldValuePlaceholder: 'e.g.: ${temp}',
        enableReportStrategy: 'Enable Report Strategy',
        reportType: 'Report Type',
        selectReportType: 'Please select report type',
        reportPeriod: 'Report Period',
        reportPeriodRequired: 'Please enter report period',
        milliseconds: 'milliseconds',
        addField: 'Add {fieldType} Field',
        delete: 'Delete',
        unnamed: 'Unnamed Field',
        noValue: 'No Value',
        reportStrategy: 'Report Strategy',
        validationFailed: 'Validation failed',
        // Added data type option labels
        dataTypeString: 'String',
        dataTypeDouble: 'Double',
        dataTypeInteger: 'Integer',
        dataTypeBoolean: 'Boolean',
        attributeTypeName: 'Attribute',
        timeseriesTypeName: 'Timeseries',
      },
      extensionConfigModal: {
        title: 'Extension Configuration',
        description:
          'Configure parameters for custom converter, these parameters will be passed to the conversion function.',
        noConfigItems: 'No configuration items',
        clickToAdd: 'Click the button below to add configuration',
        configItem: 'Config Item',
        configItemSettings: 'Configuration Item Settings',
        configKey: 'Config Key',
        configKeyRequired: 'Please enter config key',
        configKeyPlaceholder: 'e.g.: timeout',
        configValue: 'Config Value',
        configValueRequired: 'Please enter config value',
        configValuePlaceholder: 'e.g.: 30000',
        addConfigItem: 'Add Configuration Item',
        delete: 'Delete',
        unnamed: 'Unnamed',
        noValue: 'No Value',
        validationFailed: 'Validation failed',
      },
      requestsMappingDrawer: {
        editTitle: 'Edit Request Mapping',
        addTitle: 'Add Request Mapping',
        subtitle: 'Requests mapping',
        requestType: 'Request type',
        requestTypeRequired: 'Please select request type',
        selectRequestType: 'Select request type',
        topicFilter: 'Topic filter',
        topicFilterRequired: 'Please enter topic filter',
        topicFilterPlaceholder: 'Please enter',
        deviceInfoConfig: 'Device Information Configuration',
        deviceName: 'Device Name',
        selectSource: 'Select source',
        sourceRequired: 'Please select data source',
        deviceNameExpression: 'Device Name Expression',
        deviceNameExpressionRequired: 'Please enter device name expression',
        deviceProfile: 'Device Profile',
        deviceProfileRequired: 'Please enter device profile expression',
        requestParsingConfig: 'Request Parsing Configuration',
        attributeNameExpression: 'Attribute Name Expression',
        attributeNameExpressionRequired: 'Please enter attribute name expression',
        responseProcessingConfig: 'Response Processing Configuration',
        responseValueExpression: 'Response Value Expression',
        responseValueRequired: 'Please enter response value expression',
        responseTopicExpression: 'Response Topic Expression',
        responseTopicRequired: 'Please enter response topic expression',
        retainMessage: 'Retain Message',
        deviceNameFilter: 'Device name filter',
        deviceNameFilterRequired: 'Please enter device name filter',
        deviceNameFilterPlaceholder: 'Enter device name filter pattern',
        attributeFilter: 'Attribute filter',
        attributeFilterRequired: 'Please enter attribute filter',
        attributeFilterPlaceholder: 'Enter attribute filter pattern',
        responseType: 'Response type',
        withResponse: 'With response',
        withoutResponse: 'Without response',
        methodFilter: 'Method filter',
        methodFilterRequired: 'Please enter method filter',
        methodFilterPlaceholder: 'Enter RPC method name',
        requestTopicExpression: 'Request topic expression',
        requestTopicRequired: 'Please enter request topic expression',
        valueExpression: 'Value expression',
        valueExpressionRequired: 'Please enter value expression',
        responseTopicQos: 'Response topic QoS',
        responseTopicQosRequired: 'Please select response topic QoS',
        responseTimeout: 'Response timeout',
        responseTimeoutRequired: 'Please enter response timeout',
        retain: 'Retain',
        validationFailed: 'Validation failed',
        // Request type configurations
        deviceConnectRequestConfig: 'Device Connect Request Configuration',
        deviceConnectDescription:
          'Configure MQTT topic mapping and device information extraction rules when devices connect, supporting dynamic retrieval of device names and profile information from messages or topics.',
        deviceDisconnectRequestConfig: 'Device Disconnect Request Configuration',
        deviceDisconnectDescription:
          'Configure MQTT topic mapping and device identification rules when devices disconnect, used to handle device offline status updates.',
        attributeRequestConfig: 'Attribute Request Configuration',
        attributeRequestDescription:
          'Configure attribute request processing rules, including device name extraction, attribute name parsing, and response message format and publishing topics.',
        attributeUpdateConfig: 'Attribute Update Configuration',
        attributeUpdateDescription:
          'Configure attribute update processing rules. When server-side attributes change, updates are pushed to specified MQTT topics.',
        rpcCommandConfig: 'RPC Command Configuration',
        rpcCommandDescription:
          'Configure RPC command processing rules, supporting one-way and two-way RPC calls, including request topics, response topics, and timeout settings.',
        requestMappingConfig: 'Request Mapping Configuration',
        requestMappingDescription:
          'MQTT connector request mapping configuration for handling device connection, disconnection, attribute requests, attribute updates, and RPC commands.',
      },
    },
    opcua: {
      server: {
        title: 'Server Configuration',
        url: 'Server endpoint url',
        urlRequired: 'Please enter server endpoint url',
        urlPlaceholder: 'opc.tcp://localhost:4840/freeopcua/server/',
        timeout: 'Timeout',
        timeoutPlaceholder: '5000',
        securityPolicy: 'Security policy',
        securityPolicyPlaceholder: 'Select security policy',
        scanPeriod: 'Scan period (ms)',
        scanPeriodPlaceholder: '5000',
        subCheckPeriod: 'Subscription check period',
        subCheckPeriodPlaceholder: '100',
        enableSubscription: 'Enable subscription',
        enableSubscriptionTip: 'Enable OPC UA server subscription to receive real-time data change notifications',
        showMap: 'Show map',
        showMapTip: 'Display node mapping in logs for debugging',
        security: 'Security',
        securityRequired: 'Please select security type',
        username: 'Username',
        usernameRequired: 'Please enter username',
        usernamePlaceholder: 'Enter username',
        password: 'Password',
        passwordPlaceholder: 'Enter password',
        pathToCACert: 'Path to CA certificate file',
        pathToCACertPlaceholder: '/path/to/ca.pem',
        pathToPrivateKey: 'Path to private key file',
        pathToPrivateKeyPlaceholder: '/path/to/private.key',
        pathToClientCert: 'Path to client certificate file',
        pathToClientCertPlaceholder: '/path/to/client.pem',
        mode: 'Mode',
        modePlaceholder: 'Select mode',
        certPathTip: 'The path is local to the gateway file system',
        validationFailed: 'Form validation failed',
        // Security policy options
        policyNone: 'None',
        policyBasic128Rsa15: 'Basic128Rsa15',
        policyBasic256: 'Basic256',
        policyBasic256Sha256: 'Basic256Sha256',
        // Security mode options
        modeNone: 'None',
        modeSign: 'Sign',
        modeSignAndEncrypt: 'Sign and Encrypt',
        // Identity type options
        identityAnonymous: 'Anonymous',
        identityBasic: 'Basic',
        identityCertificates: 'Certificates',
      },
      dataMapping: {
        title: 'Data Mapping',
        description:
          'Data mapping provides the capability to parse and convert data received from an OPC UA server into specific data keys.',
        noMappings: 'No data mappings configured. Click "+" to create one.',
        addMapping: 'Add Mapping',
        edit: 'Edit',
        delete: 'Delete',
        deviceNode: 'Device Node',
        deviceName: 'Device Name',
        deviceProfile: 'Device Profile',
        actions: 'Actions',
        // Drawer
        addTitle: 'Add Data Mapping',
        editTitle: 'Edit Data Mapping',
        subtitle: 'Data Mapping Configuration',
        deviceNodeLabel: 'Device node',
        deviceNodeRequired: 'Please enter device node',
        deviceNodePlaceholder: 'Please enter device node',
        deviceNodeHelp: 'Device node path in OPC UA server',
        deviceInfoSection: 'Device',
        nameLabel: 'Name',
        nameRequired: 'Please enter device name',
        namePlaceholder: 'Please enter device name',
        profileLabel: 'Profile name',
        profilePlaceholder: 'Device',
        sourceLabel: 'Source',
        sourcePath: 'Path',
        sourceConstant: 'Constant',
        reportStrategySection: 'Report strategy',
        enableReportStrategy: 'Enable report strategy',
        reportType: 'Report type',
        reportTypeRequired: 'Please select report type',
        reportPeriod: 'Report period',
        reportPeriodRequired: 'Please enter report period',
        reportPeriodPlaceholder: '30000',
        milliseconds: 'milliseconds',
        attributesSection: 'Attributes',
        timeSeriesSection: 'Time series',
        attributeUpdatesSection: 'Attribute updates',
        rpcMethodsSection: 'RPC methods',
        validationFailed: 'Validation failed',
        comingSoon: 'Feature under development, coming soon',
        deviceConfigTab: 'Device Configuration',
      },
      table: {
        attributes: 'Attributes',
        addAttribute: 'Add Attribute',
        timeSeries: 'Time series',
        addTimeSeries: 'Add Time series',
        attributeUpdates: 'Attribute updates',
        addAttributeUpdate: 'Add Attribute update',
        rpcMethods: 'RPC methods',
        addRpcMethod: 'Add RPC method',
        key: 'Key',
        keyPlaceholder: 'Enter key name',
        type: 'Type',
        value: 'Value',
        valuePlaceholder: 'Enter value or path expression',
        path: 'Path',
        pathPlaceholder: 'Enter OPC UA node path',
        attributeOnThingsBoard: 'ThingsBoard Attribute',
        attributeOnThingsBoardPlaceholder: 'Enter ThingsBoard attribute name',
        attributeOnDevice: 'Device Attribute',
        attributeOnDevicePlaceholder: 'Enter device attribute path',
        method: 'Method',
        methodPlaceholder: 'Enter RPC method name',
        arguments: 'Arguments',
        editArguments: 'Edit Arguments',
        addArgument: 'Add Argument',
        action: 'Action',
        requiredFieldsError: 'Please fill in all required fields',
        reportStrategy: 'Report Strategy',
      },
    },
    table: {
      tag: 'Tag',
      type: 'Type',
      functionCode: 'Function Code',
      objectsCount: 'Objects Count',
      bitTargetType: 'Bit target type',
      bit: 'Bit',
      address: 'Address',
      value: 'Value',
      modifier: 'Modifier',
      reportStrategy: 'Report Strategy',
      actions: 'Actions',
      tagPlaceholder: 'Please enter tag name',
      addressPlaceholder: 'Please enter address',
      valuePlaceholder: 'Please enter value',
      tagRequired: 'Tag name cannot be empty',
      addressRequired: 'Address cannot be empty',
      confirmDelete: 'Confirm Delete',
      deleteConfirmContent: 'Are you sure you want to delete this {title} configuration?',
      confirm: 'Confirm',
      cancel: 'Cancel',
      divider: 'Divider',
      multiplier: 'Multiplier',
      attributes: 'Attributes',
      addAttribute: 'Add Attribute',
      timeSeries: 'Time series',
      addTimeSeries: 'Add Time Series',
      attributeUpdates: 'Attribute updates',
      addAttributeUpdate: 'Add Attribute Update',
      rpcRequests: 'RPC requests',
      addRpcRequest: 'Add RPC Request',
    },
    attributeConfigModal: {
      title: 'Advanced Configuration',
      description: 'Configure advanced parameters for attributes, including report strategy and data modifiers.',
      reportStrategyConfig: 'Report Strategy Configuration',
      enableReportStrategy: 'Enable Report Strategy',
      reportType: 'Report Type',
      selectReportType: 'Select report type',
      reportPeriod: 'Report Period',
      reportPeriodRequired: 'Please enter report period',
      reportPeriodPlaceholder: '15000',
      milliseconds: 'milliseconds',
      reportStrategyDisabled: 'Report strategy is disabled, data will not be reported automatically',
      dataModifierConfig: 'Data Modifier Configuration',
      enableDataModifier: 'Enable Data Modifier',
      modifierType: 'Modifier Type',
      selectModifierType: 'Select modifier type',
      value: 'Value',
      valueRequired: 'Please enter value',
      valuePlaceholder: '1',
      dataModifierDisabled: 'Data modifier is disabled, original values will be used',
      validationFailed: 'Validation failed',
    },
  },
};
